home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
031-040
/
amok33
/
uclock
/
uclock.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
5KB
|
154 lines
(* -------------------------------------------------------------------------
:Program. UClock
:Author. Holger Bolay
:Address. Hoffmannstraße 168, D-7250 Leonberg 1
:Phone. 07152/22135
:History. Version 1.0 : Original translation!
:History. Version 1.01 : Beep on the hour
:History. Version 1.02 : Clever reorganized
:History. Version 1.1 : <unset> Function implemented
:Copyright. FreeWare
:Language. Modula-2
:Translator. M2Amiga 3.2d
:Imports. Beep [fbs]
:Remark. The Modula-2 Version of Mike Meyer's MClk.
:Remark. My first Modula-program (Don't laugh) - may help beginners!
:Contents. Small window which Shows Time & Memory.
------------------------------------------------------------------------- *)
MODULE UClock;
FROM SYSTEM IMPORT ADR;
FROM Arts IMPORT Assert, TermProcedure, Terminate, CurrentLevel;
FROM Conversions IMPORT ValToStr;
FROM Str IMPORT Length, Copy, Concat;
FROM Dos IMPORT Date, DateStamp, Delay;
FROM Exec IMPORT Byte, AvailMem, MemReqSet, MemReqs, GetMsg, ReplyMsg,
TaskPtr, SetTaskPri, FindTask;
FROM Graphics IMPORT RastPortPtr, SetAPen, Text, Move;
FROM Intuition IMPORT NewWindow, OpenWindow, CloseWindow, WindowPtr,
IDCMPFlags, IDCMPFlagSet, WindowFlags, WindowFlagSet,
ScreenFlagSet, ScreenFlags, IntuiMessagePtr;
FROM Beep IMPORT Beep;
(* $R- $V- $S- $F- Make it faster and shorter! *)
VAR DateWindowPtr : WindowPtr;
DateRPortPtr : RastPortPtr;
chipMem, fastMem : LONGINT;
Hour, Minute, Second : LONGINT;
chipStr, fastStr : ARRAY [1..4] OF CHAR;
HourStr, MinuteStr, SecondStr : ARRAY [1..2] OF CHAR;
VTSerr : BOOLEAN;
AllTogether : ARRAY [1..50] OF CHAR;
IntuiMsgPtr : IntuiMessagePtr;
class : IDCMPFlagSet;
Time : Date;
PROCEDURE CloseDown;
BEGIN
IF DateWindowPtr # NIL THEN
CloseWindow(DateWindowPtr);
DateWindowPtr := NIL;
END; (* IF *)
END CloseDown;
PROCEDURE Init;
VAR DateWindow : NewWindow;
OldPri : Byte;
ClockTaskPtr : TaskPtr;
BEGIN
TermProcedure(CloseDown);
ClockTaskPtr := FindTask(NIL);
Assert(ClockTaskPtr # NIL, ADR("Can't find Task!?!"));
OldPri := SetTaskPri(ClockTaskPtr, 20);
WITH DateWindow DO
leftEdge := 223; topEdge := 0;
width := 369; height := 10;
detailPen := 0; blockPen := 1;
idcmpFlags := IDCMPFlagSet{closeWindow};
flags := WindowFlagSet{windowDepth, windowDrag, windowClose,
rmbTrap, windowRefresh, noCareRefresh};
firstGadget := NIL;
checkMark := NIL;
title := NIL;
screen := NIL;
bitMap := NIL;
minWidth := 0; minHeight := 0;
maxWidth := 0; maxHeight := 0;
type := ScreenFlagSet{wbenchScreen};
END; (* WITH *)
DateWindowPtr := OpenWindow(DateWindow);
Assert(DateWindowPtr # NIL, ADR("Unable to open Date-Window!"));
DateRPortPtr := DateWindowPtr^.rPort;
SetAPen(DateRPortPtr, 1);
END Init;
PROCEDURE Concatenation;
BEGIN
chipMem := AvailMem(MemReqSet{chip}) DIV 1024;
fastMem := AvailMem(MemReqSet{fast}) DIV 1024;
DateStamp(ADR(Time));
Hour := Time.minute DIV 60;
Minute := Time.minute MOD 60;
Second := Time.tick DIV 50;
ValToStr(chipMem, FALSE, chipStr, 10, 3, ' ', VTSerr);
ValToStr(fastMem, FALSE, fastStr, 10, 4, ' ', VTSerr);
ValToStr(Hour, FALSE, HourStr, 10, 2, ' ', VTSerr);
ValToStr(Minute, FALSE, MinuteStr, 10, 2, '0', VTSerr);
ValToStr(Second, FALSE, SecondStr, 10, 2, '0', VTSerr);
Copy(AllTogether, " Chip:");
Concat(AllTogether, chipStr);
Concat(AllTogether, " ");
Concat(AllTogether, "Fast:");
Concat(AllTogether, fastStr);
Concat(AllTogether, " ");
Concat(AllTogether, "Time:");
IF Time.days # 0 THEN
Concat(AllTogether, HourStr);
Concat(AllTogether, ":");
Concat(AllTogether, MinuteStr);
Concat(AllTogether, ":");
Concat(AllTogether, SecondStr);
Concat(AllTogether, " ");
ELSE
Concat(AllTogether, " <unset> ");
END; (* IF *)
END Concatenation;
BEGIN
Init;
LOOP
Delay(15);
Concatenation;
Move(DateRPortPtr, 28, 7);
Text(DateRPortPtr, ADR(AllTogether), Length(AllTogether));
IntuiMsgPtr := GetMsg(DateWindowPtr^.userPort);
IF (Second = 0) AND (Minute = 0) THEN
Beep(FALSE);
REPEAT
Delay(1);
DateStamp(ADR(Time));
Second := Time.tick DIV 50;
UNTIL (Second # 0);
END; (* IF *)
IF Time.days = 0 THEN
Beep(TRUE);
END; (* IF *)
IF IntuiMsgPtr # NIL THEN
class := IntuiMsgPtr^.class;
ReplyMsg(IntuiMsgPtr);
IF (closeWindow IN class) THEN
Terminate(CurrentLevel());
END; (* IF *)
END; (* IF *)
END; (* LOOP *)
END UClock.